# 导入LangChain 工具
from langchain.tools import tool

# 库存查询
@tool
def check_inventory(flower_type: str) -> int:
    """
    查询特定类型花的库存数量。
    参数:
    - flower_type: 花的类型
    返回:
    - 库存数量 (暂时返回一个固定的数字)
    """
    # 实际应用中这里应该是数据库查询或其他形式的库存检查
    return 100  # 假设每种花都有100个单位

# 定价函数
@tool
def calculate_price(base_price: float, markup: float) -> float:
    """
    根据基础价格和加价百分比计算最终价格。
    参数:
    - base_price: 基础价格
    - markup: 加价百分比
    返回:
    - 最终价格
    """
    return base_price * (1 + markup)

# 调度函数
@tool
def schedule_delivery(order_id: int, delivery_date: str):
    """
    安排订单的配送。
    参数:
    - order_id: 订单编号
    - delivery_date: 配送日期
    返回:
    - 配送状态或确认信息
    """
    # 在实际应用中这里应该是对接配送系统的过程
    return f"订单 {order_id} 已安排在 {delivery_date} 配送"
tools = [check_inventory, calculate_price, schedule_delivery]

# 设置大模型
from langchain.chat_models import ChatOpenAI
model = ChatOpenAI(
    model="qwen-plus",
    openai_api_key="sk-4e88cf4db3e14894bafaff606d296610",
    openai_api_base="https://dashscope.aliyuncs.com/compatible-mode/v1",
    temperature=0
)

# 设置计划者和执行者
from langchain_experimental.plan_and_execute import PlanAndExecute, load_agent_executor, load_chat_planner
planner = load_chat_planner(model)
executor = load_agent_executor(model, tools, verbose=True)

# 初始化Plan-and-Execute Agent
agent = PlanAndExecute(planner=planner, executor=executor, verbose=True)

# 运行Agent解决问题
agent.run("查查玫瑰的库存然后给出出货方案！")

"""
这段代码实现了一个智能订单处理助手，其核心业务逻辑流程如下：

接收用户请求：理解用户用自然语言提出的需求（例如：“查查玫瑰的库存然后给出出货方案！”）。

制定计划：AI模型（计划者）将复杂的用户请求分解成一系列可执行的步骤。例如：

第一步：调用 check_inventory 工具查询“玫瑰”的库存。

第二步：基于库存结果，调用 calculate_price 工具计算价格（可能需要用户提供或假设基础价格和加价率）。

第三步：生成一个订单ID，并调用 schedule_delivery 工具安排配送（可能需要用户提供或假设一个配送日期）。

执行计划：AI模型（执行者）根据计划，按顺序调用相应的工具函数来完成每一步任务。

汇总返回结果：将各个工具的执行结果整合起来，形成一个完整、连贯的自然语言回复，最终给用户一个“出货方案”。
"""